﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.database;
using ERP_RORZE_DLL.Product.DAO;
using System.Text.RegularExpressions;
using ERP_RORZE_PERMISSION.Base;
using BaseDAO = ERP_RORZE_TOOL.DBAccess.BaseDAO;

namespace ERP_RORZE_PRODUCT.Product.PartHandling
{
    public partial class frm_InspAnodInput : DevExpress.XtraEditors.XtraForm
    {
        public event EventHandler Reload;
        ClsDInspAnodTable obj = new ClsDInspAnodTable();
        ClsPartHandlingDAO clsParthandinhDAO = new ClsPartHandlingDAO();
        private LogUtils log;
        DataTable dt;
        private bool dropDown;

        public frm_InspAnodInput()
        {
            InitializeComponent();
            log = new LogUtils();
        }

        private void frm_InspAnodInput_Load(object sender, EventArgs e)
        {
            //lấy danh sách MONo cho vào combo
            dt = clsParthandinhDAO.GetlAllMONo();
            List<ClsMOTable> objs = new List<ClsMOTable>();
            foreach (DataRow r in dt.Rows)
            {
                ClsMOTable obj = new ClsMOTable();
                obj.MONo = r["MONo"].ToString();  //
                obj.PartID = r["PartID"].ToString();  //
                obj.MOQty = int.Parse(r["MOQty1"].ToString());   ////
                obj.DeadLine = (DateTime)r["Deadline"];
                objs.Add(obj);
            }

            cbMONo.DataSource = objs;
            cbMONo.DisplayMember = "MONo";
            cbMONo.ValueMember = "MONo";

            //lấy danh sách StaffID cho vào combo
            dt = clsParthandinhDAO.GetlAllStaffID();
            cbStaffID.DataSource = dt;
            cbStaffID.DisplayMember = "StaffID";
            cbStaffID.ValueMember = "StaffID";
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (GetData())
            {

                int intOK = 0;
                int intNG = 0;
                dt = clsParthandinhDAO.GetInspHandMO(cbMONo.SelectedValue.ToString());
                foreach (DataRow r in dt.Rows)
                {
                    intOK = intOK + int.Parse(r["InspOK"].ToString());
                    intNG = intNG + int.Parse(r["InspNG"].ToString());
                }
                if (IsNumber(txtOKQty.Text) == false)
                {
                    MessageBox.Show("OKQty phải là kiểu số");
                }
                else if (int.Parse(txtOKQty.Text) < 0)
                {
                    MessageBox.Show("OKQty phải lớn hơn 0");
                }
                else if (int.Parse(txtOKQty.Text) > intOK)
                {
                    MessageBox.Show("Số lượng OK trong bộ phận kiểm tra: " + intOK + " hãy kiểm tra lại số lượng giao nhận");
                }
                else if (IsNumber(txtNGQty.Text) == false)
                {
                    MessageBox.Show("NGQty phải là kiểu số");
                }
                else if (int.Parse(txtNGQty.Text) < 0)
                {
                    MessageBox.Show("NGQty phải lớn hơn 0");
                }
                else if (int.Parse(txtNGQty.Text) > intNG)
                {
                    MessageBox.Show("Số lượng NG trong bộ phận kiểm tra: " + intNG + " Hãy kiểm tra lại số lượng giao nhận");
                }
                else if (int.Parse(txtNGQty.Text) == 0 && int.Parse(txtOKQty.Text) == 0)
                {
                    MessageBox.Show("Số lượng NG và OK không thể đồng thời bằng 0");
                }
                else
                {
                    //try
                    //{
                    obj.Date = dateDate.Value;
                    obj.MONo = cbMONo.SelectedValue.ToString();
                    obj.StaffID = cbStaffID.Text;
                    obj.Finished = checkFinished.Checked;
                    obj.INGQty = int.Parse(txtNGQty.Text);
                    obj.IOKQty = int.Parse(txtOKQty.Text);
                    obj.Note = txtNote.Text;
                    clsParthandinhDAO.InsertInspAnodDetail(obj);

                    //write Log
                    log.Table = LogConstant.Table.Product.Insp_Anod;
                    log.Task = LogConstant.Task.Insert;
                    log.Description = "MONo: " + obj.MONo + "; Date: " + obj.Date;
                    log.WriteLog();

                    MessageBox.Show("Đã nhập xong");
                    //Reload(sender, e);
                    cbMONo.Text = "";
                    txtMOQty.Text = "";
                    txtNGQty.Text = "0";
                    txtOKQty.Text = "";
                    txtPartID.Text = "";
                    txtDeadline.Text = "";
                    txtNote.Text = "";
                    cbMONo.Focus();
                    //}
                    //catch
                    //{
                    //    MessageBox.Show("NGQty, OKQty phải là kiểu số");
                    //}
                }
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cbMONo_SelectedValueChanged(object sender, EventArgs e)
        {
            ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
            txtMOQty.Text = obj.MOQty.ToString();
            txtOKQty.Text = obj.MOQty.ToString();
            txtDeadline.Text = obj.DeadLine.ToString();
            txtPartID.Text = obj.PartID.ToString();
            txtNGQty.Text = "0";
        }

        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // Add controls for which Arrow keys => focus is not required.
            if ((!dropDown && (ActiveControl is TextBox || ActiveControl is System.Windows.Forms.ComboBox || ActiveControl is System.Windows.Forms.DateTimePicker)))
            {
                switch (keyData)
                {
                    case Keys.Up:
                        //case Keys.Down:

                        //bool forward = (keyData == Keys.Down);
                        if (this.ProcessTabKey(false))
                        {
                            return true;
                        }

                        break;
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void cbMONo_DropDown(object sender, EventArgs e)
        {
            dropDown = true;
        }

        private void cbMONo_DropDownClosed(object sender, EventArgs e)
        {
            dropDown = false;
        }

        private void frm_InspAnodInput_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Alt)
            {
                if (e.KeyCode == Keys.D)
                {
                    this.btnAdd.PerformClick();
                }
            }
            else if (e.KeyCode == Keys.End)
            {
                btnAdd.Focus();
            }
            else if (e.KeyCode == Keys.Home)
            {
                dateDate.Focus();
            }
        }

        private bool GetData()
        {
            DataTable dtCheck;

            dtCheck =
                BaseDAO.ExecuteQuery("select [222_Staff].StaffID from [222_Staff] where [222_Staff].StaffID ='" +
                                     cbStaffID.Text.Trim() + "'");
            if (dtCheck.Rows.Count == 0)
            {
                MessageBox.Show(@"Không có StaffID này. Vui lòng kiểm tra lại.");
                cbStaffID.Focus();
                return false;
            }

            return true;
        }

    }
}